#ifndef MQTT_CLOUD_H
#define MQTT_CLOUD_H

#include <stdbool.h>

// MQTT连接状态
typedef enum {
    MQTT_DISCONNECTED = 0,
    MQTT_CONNECTING,
    MQTT_CONNECTED,
    MQTT_CONNECTION_FAILED
} mqtt_status_t;

// 设备数据结构
typedef struct {
    // 空调数据
    bool ac_power;
    int ac_temperature;
    int ac_mode;      // 0:制冷, 1:制热, 2:送风, 3:除湿
    int ac_fan_speed; // 0:自动, 1:低, 2:中, 3:高
    
    // 四个独立灯光控制数据
    bool light1_power;  // 灯光1状态
    bool light2_power;  // 灯光2状态
    bool light3_power;  // 灯光3状态
    bool light4_power;  // 灯光4状态
    
    // LED控制数据
    bool led_power;
    
    // 环境监测数据
    int temperature;
    int humidity;
    int smoke_density;  // 烟雾浓度 (0-100)
    
    // 音乐播放器数据
    bool music_playing;
    int music_volume;
    char current_song[128];
    
    // 呼叫触发器数据
    bool dad_call_trigger;        // 爸爸呼叫触发器
    bool mom_call_trigger;        // 妈妈呼叫触发器
    bool son_call_trigger;        // 儿子呼叫触发器
    bool daughter_call_trigger;   // 女儿呼叫触发器
    
    // 呼叫消息内容
    char dad_message[512];        // 爸爸消息内容
    char mom_message[512];        // 妈妈消息内容
    char son_message[512];        // 儿子消息内容
    char daughter_message[512];   // 女儿消息内容
} device_data_t;

// 回调函数类型定义
typedef void (*mqtt_status_callback_t)(mqtt_status_t status);
typedef void (*mqtt_message_callback_t)(const char* topic, const char* message);
typedef void (*light_control_callback_t)(int light_index, bool state);  // 灯光控制回调函数
typedef void (*ac_control_callback_t)(const char* action, int value);   // 空调控制回调函数
typedef void (*music_control_callback_t)(const char* action, int value); // 音乐播放器控制回调函数

// MQTT云平台接口函数
int mqtt_cloud_init(void);
int mqtt_cloud_connect(void);
void mqtt_cloud_disconnect(void);
int mqtt_cloud_publish_device_data(const device_data_t* data);
int mqtt_cloud_subscribe_commands(void);
void mqtt_cloud_set_status_callback(mqtt_status_callback_t callback);
void mqtt_cloud_set_message_callback(mqtt_message_callback_t callback);
void mqtt_cloud_set_light_control_callback(light_control_callback_t callback);  // 设置灯光控制回调
void mqtt_cloud_set_ac_control_callback(ac_control_callback_t callback);        // 设置空调控制回调
void mqtt_cloud_set_music_control_callback(music_control_callback_t callback);  // 设置音乐控制回调
mqtt_status_t mqtt_cloud_get_status(void);
void mqtt_cloud_cleanup(void);

// 数据上传接口
int mqtt_upload_ac_data(bool power, int temperature, int mode, int fan_speed);
int mqtt_upload_lights_data(bool light1, bool light2, bool light3, bool light4);
int mqtt_upload_led_data(bool power);
int mqtt_upload_environment_data(int temperature, int humidity, int smoke_density);
int mqtt_upload_music_data(bool playing, int volume, const char* song);
// is_call: true表示呼叫，false表示挂断
int mqtt_upload_call_data(int contact_index, bool is_call, const char* message);

#endif // MQTT_CLOUD_H
